import type { AxiosInstance , AxiosError , InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig } from 'axios'
import axios from 'axios'
import { ElMessage } from 'element-plus'
import { config } from 'process'

const api :AxiosInstance = axios.create({
    baseURL:'/api',
    timeout:10000
})

api.interceptors.request.use(
    (config:InternalAxiosRequestConfig)=>{
        return config
    },
    (error:AxiosError)=>{
        ElMessage.error('请求失败！')
        return error
    }
)

api.interceptors.response.use(
    (Response:AxiosResponse)=>{
        const {status,data}=Response
        // const status = Response.status
        // const data = Response.data
        if(status===200||status===304){
            return data
        }else{
            ElMessage.error('相应失败！')
            return Promise.reject(Response)
        }
        
    },
    (error:AxiosError)=>{
        ElMessage.error('相应失败！')
            return Promise.reject(error)
})
//导出一个封装请求的对象
export const http ={
    //get请求，接收并返回一个T类型值，参数：1： url;参数2： config?
    get <T = any>(url:string,config?:AxiosRequestConfig): Promise<T>{
        return api.get(url,config)
    },
    //post请求，接收并返回一个T类型值，参数：1： url;参数2： data; 参数3，config?
    post<T =any>(url:string,data: object,config?:AxiosRequestConfig):Promise<T>{
        return api.post(url,data,config)
    },
    upload<T =any>(url:string,data: object,config?:AxiosRequestConfig):Promise<T>{
       config.headers ={
       'Content-Type': 'multpart/from-data'
       }
        return api.post(url,data,config)
    },
    //delete请求，接收并返回一个T类型值，参数：1： url;参数2： config?
    delete<T = any>(url:string,config?:AxiosRequestConfig): Promise<T>{
        return api.get(url,config)
    },
     //put请求，接收并返回一个T类型值，参数：1： url;参数2： data; 参数3，config?
    put<T =any>(url:string,data: object,config?:AxiosRequestConfig):Promise<T>{
        return api.post(url,data,config)
    },
    
}